package com.um2.compression.grol;

import java.awt.BorderLayout;
import java.io.File;

import javax.swing.JFileChooser;
import javax.swing.JFrame;

public class FenetreApplication extends JFrame{

	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	// le panneau du haut
	private Panneauhaut pHaut = null ;
	
	// du centre
	private PanneauCentre pCentre = null ;

	//affiche les infos en haut
	boolean afficheInfosEnHaut = true ;

	private PanneauChargement pchargement = null ;
	
	
	public FenetreApplication() {
		
		// le nom de la fenetre
		super("compresser une image") ;
		
		
		// les menus
		this.setJMenuBar(new ApplicationJMenuBar(this)) ;
		
		
		// un layout border
		this.getContentPane().setLayout(new BorderLayout()) ;
		
		
		// en haut les options:
		pHaut  = new Panneauhaut(this) ;
//		JScrollPane jsp = new JScrollPane(pHaut) ;
//		jsp.setSize(this.getWidth()-30, 150) ;
		this.getContentPane().add(pHaut, BorderLayout.NORTH) ;
		
		
		
		
		
		
		
		
		// en bas les onglets
		this.pCentre = new PanneauCentre(this) ;
		this.getContentPane().add(pCentre, BorderLayout.CENTER) ;
		
		
		
		
		// en bas la barre de chargement
		this.pchargement  = new PanneauChargement() ;
		this.getContentPane().add(pchargement, BorderLayout.SOUTH) ;
		
		
		
		
		// taille
		this.setSize(800,600) ;
		// rendre visible
		this.setVisible(true) ;
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
	}

	
	
	
	public void afficherInfos() {
		if (afficheInfosEnHaut)
		{
			this.pHaut.setVisible(false) ;
			afficheInfosEnHaut = false ;
		}
		else
		{
			this.pHaut.setVisible(true) ;
			afficheInfosEnHaut = true ;
		}
		
	}
	
	
	
	public void setImage(File fichierImage) {
		this.pCentre.getPanneauImageOriginale().setImage(fichierImage) ;
		this.pHaut.activerBoutonValider() ;
	}




	public PanneauCentre getPanneauCentre() {
		return pCentre;
	}




	public int getNombreDePointsAleatoires() {
		return pHaut.getNombreDePointsAleatoires();
	}




	public int getTailleMinimaleZone() {
		return pHaut.getTailleMinimaleZone();
	}




	public int getPourcentagePerteLuminance() {
		return pHaut.getPourcentagePerteLuminance();
	}




	public int getPourcentagePerteCrominanceRouge() {
		return pHaut.getPourcentagePerteCrominanceRouge();
	}




	public void enregistrer() {
		
		
		if (this.getPanneauCentre().getPanneauImageFinale().getImage()==null) {
			System.err.println("pas d'image a enregistrer");
			return ;
		}
		Utilitaire.enregistrer(
				this.pCentre.getPanneauImageFinaleLuminance().getImage().getWidth (this.pCentre.getPanneauImageFinaleLuminance()),
				this.pCentre.getPanneauImageFinaleLuminance().getImage().getHeight(this.pCentre.getPanneauImageFinaleLuminance()),
				this.pCentre.getPanneauImageFinaleLuminance().getRectangles(),
				this.pCentre.getPanneauImageFinaleLuminance().getValeurs(),
				this.pCentre.getPanneauImageFinaleCrominanceRouge().getRectangles(),
				this.pCentre.getPanneauImageFinaleCrominanceRouge().getValeurs(),
				this.pCentre.getPanneauImageFinaleCrominanceBleu().getRectangles(),
				this.pCentre.getPanneauImageFinaleCrominanceBleu().getValeurs(),	
				this.pCentre.getPanneauImageFinaleLuminance().getPixelsRestants(),
				this.pCentre.getPanneauImageFinaleCrominanceBleu().getPixelsRestants(),
				this.pCentre.getPanneauImageFinaleCrominanceBleu().getPixelsRestants()
				) ;
	}




	public PanneauChargement getPanneauchargement() {
		return pchargement;
	}




	public void ouvrir() {
		
		
		
		JFileChooser jfc = new JFileChooser("./") ;
		
		jfc.removeChoosableFileFilter(jfc.getFileFilter());
		jfc.addChoosableFileFilter(new Filtre());

		if (jfc.showDialog(null, "ouvrir") == JFileChooser.APPROVE_OPTION)
		{
			File f = jfc.getSelectedFile() ;
			Utilitaire.ouvrirBinaireGrol(f,this) ;
			
			
//		    getPanneauCentre().getPanneauImageOuverteL().recalculeImage() ;
//		    getPanneauCentre().getPanneauImageOuverteL().repaint() ;
//		    
//		    getPanneauCentre().getPanneauImageOuverteCr().recalculeImage() ;
//		    getPanneauCentre().getPanneauImageOuverteCr().repaint() ;
//		    
		    getPanneauCentre().getPanneauImageOuverte().recalculeImage() ;
		    getPanneauCentre().getPanneauImageOuverte().repaint() ;
		    

		}

	}
	
}
